package com.sxj.corejava.code02_运算符;

/**
 * @author 石小俊
 * @date 2025年01月03日
 */
public class Test08_位运算符 {

    public static void main(String[] args) {
        int num1 = 5, num2 = 8;
        // num1二进制:00000000 00000000 00000000 00000101
        // num2二进制:00000000 00000000 00000000 00001000
        // num1&num:00000000 00000000 00000000 00000000
        System.out.println(num1 & num2);
        // num1二进制:00000000 00000000 00000000 00000101
        // num2二进制:00000000 00000000 00000000 00001000
        // num1|num: 00000000 00000000 00000000 00001101
        // 1+4+8=13
        System.out.println(num1 | num2);
        // 00000000 00000000 00000000 00000101
        // 11111111 11111111 11111111 11111010
        // 反码:11111111 11111111 11111111 11111001
        // 原码:10000000 00000000 00000000 00000110
        // 2+4=6
        System.out.println(~num1);
        // num1二进制:00000000 00000000 00000000 00000101
        // num2二进制:00000000 00000000 00000000 00001000
        // num1^num: 00000000 00000000 00000000 00001101
        // 1+4+8=13
        System.out.println(num1 ^ num2);

        // num1二进制:00000000 00000000 00000000 00000101
        // 左移两位:00 00000000 00000000 00000000 00010100
        // 00000000 00000000 00000000 00010100=4+16=20
        System.out.println(num1 << 2);
        // num1二进制:00000000 00000000 00000000 00000101
        // 右移两位:00000000 00000000 00000000 00000001 01
        // 00000000 00000000 00000000 00000001=1
        System.out.println(num1 >> 2);
        // -5二进制:10000000 00000000 00000000 00000101
        // 反码:11111111 11111111 11111111 11111010
        // 补码:11111111 11111111 11111111 11111011
        // 右移两位:11111111 11111111 11111111 11111110 11
        // 11111111 11111111 11111111 11111110
        // 反码:11111111 11111111 11111111 11111101
        // 原码:10000000 00000000 00000000 00000010=-2
        System.out.println(-5 >> 2);

        // -5二进制:10000000 00000000 00000000 00000101
        // 反码:11111111 11111111 11111111 11111010
        // 补码:11111111 11111111 11111111 11111011
        // 右移两位:00111111 11111111 11111111 11111110 11
        // 00111111 11111111 11111111 11111110
        System.out.println(-5 >>> 2);
    }

}
